In general, a computer network is the an interconnection of computer systems and other devices to facilitate the transfer of data and commands between and among the computer systems and network devices making up the network. One type of computer network, generally referred to as a client-server network, is used extensively in both local area networks (LANs) and on world-wide networks, such as the Internet. In a client-server network, several client computer systems (clients) generally are connected to a common server computer system (server) through a variety of network connections. Users of this type of network usually communicate with the network via the client systems. Further, applications which are resident in the various client computer systems typically establish some sort of association with a single server system. With such an arrangement, the client applications may then exchange commands and data with the associated server system.
By way of example, a user may be utilizing an application on a client system that provides word processing capabilities. When the user wishes to print a word processing document, for example, the word processing application may send the document and a print command over the network to the server system. The server system may then direct a printer, for example, which might be connected to the server system, to print the word processing document.
With such a client-server arrangement, several potential flaws may reveal themselves. For example, the server system may not have sufficient performance, memory for example, to provide acceptable service to all of its clients. In another example, the server system may fail, leaving the client systems without any access to the service or services which it offers.
A number of potential solutions to the above problems have been proposed in the prior art. For example, it is known that a performance problem in the server system may be solved by using a server system which contains more than one processor, i.e., a multiprocessor server system. With such an arrangement, if the performance of the server system is related to its central processing unit (CPU), providing additional CPUs in the server system may suffice.
In another example, performance of the server system may be increased by providing additional server disk storage subsystems or additional memory.
However, these approaches still introduce additional problems. For example, it is known that multiprocessor systems are expensive. It is also know that multiprocessor systems do not scale well past a few CPUs because of bottlenecks internal to the server system. Finally, it is known that microprocessor systems often fail as a unit. Thus, if one component of the multiprocessor system fails, the entire system may fail, thus rendering it useless.
Solutions have also been proposed in the past to overcome these problems associated with multiprocessor systems. For example, one such solution is to use the concept of "replicated servers." With replicated servers, a network designer may provide one or more backup servers systems to provide a redundancy. This redundancy allows the clients to connect to a second server system when a first server system has failed or is suffering performance problems. And as also know in the art, such a replication technique usually requires extensive software modifications by the network designer on the server systems, and often on the client system as well. In addition, with such a replication technique, it is well known that it is difficult to balance the load among the servers systems. Further, it is well known that, with such a replication technique, it is very difficult to balance the load when one of the redundant server systems fails, and difficult to `steer` the network communication to the appropriate redundant server system.
An improved replicated server system is needed to overcome the above stated problems.